<?php
Class CuentasController extends AppController { 
	var $name = 'Cuentas';
	
	var $helpers = array('ajax');
	var $components = array('ModelLoader');

	//FUNCIONES PRINCIPALES//
	
	function index() 
	{
		$this->setearSubMenu();

		//Primer dia mes anterior.
		$sFecha_inicial = date('d-m-Y', mktime(0,0,0,date('m')-1, 01, date('Y'))); //date('d-m-Y');
		
		//Ultimo dia del mes actual.
		$sFecha_final = $this->ultimoDia(date('d-m-Y'));
		
		$this->set('sFecha_inicial',$sFecha_inicial);

		$this->set('sFecha_final',$sFecha_final);

	}
	
	/**
	*Funcion que agrega un ingreso de dinero de un cliente.
	*
	*Este ingreso tiene una forma de pago (efectivo, cheque o tarjeta). 
	*Esta funcion guarda toda la relacion.
	*Cuenta -> Formapago -> (Cheque o Efectivo o Tarjeta)
	*@return 
	*@author gush
	*/
	function addIngreso()
	{
		//setea el submenu
		$this->setearSubMenu();
		
		$hoy = date("d-m-Y");
		$this->set('hoy',$hoy);
		
		//setea la fecha de pago del vencimiento como 1 mes mas al dia de hoy.
		$fecha_pago = $this->agregarMes($hoy);
		$this->set('fecha_pago',$fecha_pago);
		
		//setea los clientes
		$clientes = $this->requestAction('/clientes/seleccionarClientes');
		$this->set('clientes',$clientes);
		
		//setea la forma de pago
		$formaPagos = $this-> requestAction ('formapagos/listarFormaPagos');
		$this->set('formapagos',$formaPagos);
		
		$tipoMoneda=$this->requestAction('/efectivos/listarMonedas');
		$this->set('tipoMoneda',$tipoMoneda);
		
		$tipoCuota=$this->requestAction('/tarjetas/listarCuotas');
		$this->set('tipoCuota',$tipoCuota);
		
		$nombreFormaPago = $this->data['Formapago']['nombre'];
		
		if($nombreFormaPago!='')
		{	
			$this->Cuenta->data=$this->data;
			if($this->Cuenta->validates())//si esta bien valida los otros campos
			{
				//guardar la forma de pago y obtener el id del mismo
				$this->Cuenta->Formapago->save($this->data);
				$idFormaPago=$this->Cuenta->Formapago->getLastInsertId();
				$exito=1;
				switch($nombreFormaPago)
				{
					case "Efectivo"://solo guarda el efectivo, no tiene nada q validar
						$this->requestAction("efectivos/add/$idFormaPago");
						unset($this->data['Efectivo']);
					break;
					case "Tarjeta"://solo guarda la tarjeta, no tiene nada q validar
						$this->requestAction("tarjetas/add/$idFormaPago");
						unset($this->data['Tarjeta']);
					break;
					case "Cheque"://validar y salvar cheque
						$fechaDePago = $this->data['Cheque']['fecha_de_pago'];
						$mesSig = $this->agregarMes($fechaDePago);
						$this->Cuenta->Formapago->Cheque->data=$this->data;
						if($this->Cuenta->Formapago->Cheque->validates()) 
						{
							$this->requestAction("cheques/add/$idFormaPago/$mesSig");
							unset($this->data['Cheque']);
						}
						else
							$exito=0;
					break;
				}
				if($exito)//si se guardo correctamente todo se guarda la cuenta.
				{
					//Guarda Cuenta y asigna el id formapago a cuenta 
					$this->data['Cuenta']['formapagos_id']=$idFormaPago;
					
				//Convertimos la fecha a de tipo d-m-Y a Y-m-d
					$fecha=$this->data['Cuenta']['fecha'];
					$aFecha=split('-',$fecha);
					$nuevaFecha = $aFecha[2].'-'.$aFecha[1].'-'.$aFecha[0];
					$this->data['Cuenta']['fecha']=$nuevaFecha;
					
					$this->Cuenta->save($this->data);
					$this->set('status','Datos insertados con EXITO');
					unset($this->data['Cuenta']);
					//$this->render('addIngresoGrid', 'ajax');
					
				}
			}
		}
	}
	
	/**
	*Funcion que agrega un egreso de dinero correspondiente a la Empresa.
	*
	*Este egreso tiene una forma de pago (efectivo, cheque o tarjeta). 
	*Esta funcion guarda toda la relacion.
	*Cuenta -> Formapago -> (Cheque o Efectivo o Tarjeta)
	*@return 
	*@author gush
	*/
	function addEgreso () 
	{
	
		$exito=true;
		//setea el submenu
		$this->setearSubMenu();
		
		$hoy = date("d-m-Y");
		$this->set('hoy',$hoy);
		
		//setea la fecha de pago del vencimiento como 1 mes mas al dia de hoy.
		$fecha_pago = $this->agregarMes($hoy);
		$this->set('fecha_pago',$fecha_pago);

		
		//setea los servicios obtenidos
		$serviciosObtenidos = $this->requestAction('/servicios/seleccionarServiciosObtenidos');
		$this->set('serviciosObtenidos',$serviciosObtenidos);
		
		//setea los servicios obtenidos en stock
		$aServicioAlta=$this->requestAction('/articulos/listarServicioAlta');
		$this->set('aServicioAlta',$aServicioAlta);
		
		//setea la forma de pago
		$formaPagos = $this-> requestAction ('formapagos/listarFormaPagos');
		$this->set('formapagos',$formaPagos);

		$tipoMoneda=$this->requestAction('/efectivos/listarMonedas');
		$this->set('tipoMoneda',$tipoMoneda);
		
		$tipoCuota=$this->requestAction('/tarjetas/listarCuotas');
		$this->set('tipoCuota',$tipoCuota);
		
		$nombreFormaPago = $this->data['Formapago']['nombre'];
		
		if($nombreFormaPago!='')
		{	
			$this->Cuenta->data=$this->data;
			if($this->Cuenta->validates())//si esta bien valida los otros campos
			{
				//guardar la forma de pago y obtener el id del mismo
				$this->Cuenta->Formapago->save($this->data);
				$idFormaPago=$this->Cuenta->Formapago->getLastInsertId();
				$exito=1;
				switch($nombreFormaPago)
				{
					case "Efectivo"://solo guarda el efectivo, no tiene nada q validar
						$this->requestAction("efectivos/add/$idFormaPago");
						unset($this->data['Efectivo']);
					break;
					case "Tarjeta"://solo guarda la tarjeta, no tiene nada q validar
						$this->requestAction("tarjetas/add/$idFormaPago");
						unset($this->data['Tarjeta']);
					break;
					case "Cheque"://validar y salvar cheque
						$fechaDePago = $this->data['Cheque']['fecha_de_pago'];
						$mesSig = $this->agregarMes($fechaDePago);
						$this->Cuenta->Formapago->Cheque->data=$this->data;
						if($this->Cuenta->Formapago->Cheque->validates()) 
						{
							$this->requestAction("cheques/add/$idFormaPago/$mesSig");
							unset($this->data['Cheque']);
						}
						else
							$exito=0;
					break;
				}
				if($exito)//si se guardo correctamente todo se guarda la cuenta.
				{	
					//Guarda Cuenta y asigna el id formapago a cuenta 
					$this->data['Cuenta']['formapagos_id']=$idFormaPago;
					$serviciosObtenidos=$this->data['Cuenta']['servicios_id'];
					
				//Convertimos la fecha a de tipo d-m-Y a Y-m-d
					$fecha=$this->data['Cuenta']['fecha'];
					$aFecha=split('-',$fecha);
					$nuevaFecha = $aFecha[2].'-'.$aFecha[1].'-'.$aFecha[0];
					$this->data['Cuenta']['fecha']=$nuevaFecha;
					
					$cant = $this->data['Cuenta']['cantidad'];
					//pr($cant);
					$this->requestAction("articulos/actualizarStock/$serviciosObtenidos/$cant/");
					$this->Cuenta->save($this->data);
					unset($this->data['Cuenta']);
					$this->set('status','Datos insertados con EXITO');
//					$this->render('addEgreso', 'ajax');
					
				}
				else
					$this->set('status','Verifique que los campos sean correctos.');
			}
			else
				$this->set('status','Verifique que los campos sean correctos.');
		}
	}	
	
	/**
	*Funcion que calcula cuanto dinero pago un cliente.
	*
	*Esta funcion devuelve el monto pagado por un cliente hasta la fecha establecida
	*@return float
	*@param integer $idCliente id del cliente del cual se desea saber cuanto pago
	*@param date $fechaActual fecha hasta donde se consulta
	*@param string $formaPago puede preguntar segun la forma de pago
	*
	*/	
	function getTotalPagado($idCliente,$fechaActual=null,$formaPago=null)
	{
	
		//que no busque en Servicio
		$this->Cuenta->unbindModel(array('belongsTo' =>array('Servicio','Cliente')));
		
		//HAY QUE PREGUNTAR BIEN 
		//busca la fecha de inicio del contrato
		$fechaInicioContrato = $this->requestAction("clientes/getFechaInicioContrato/$idCliente");
		$fechaFinContrato = $this->requestAction("clientes/getFechaFinContrato/$idCliente");
		
		//la consulta debe estar entre las fechas del contrato
		$filtrarFecha = "AND(Cuenta.fecha >= '$fechaInicioContrato')AND(Cuenta.fecha <= '$fechaFinContrato')";
		
		
		//va solamente hasta la fecha actual.
		if($fechaActual!=null) 
		{
			$var=explode('-',$fechaActual);
			$mesActual=$var[1];//asigno el mes actual de la fecha actual
			$filtrarFecha = "AND(Cuenta.fecha <= '$fechaActual')";
		}
			
		if($formaPago!=null) 
		{
			$filtrarFecha .= "AND(Formapago.nombre = '$formaPago')";
		}
		//limito la fecha al rango de las fechas inicio y fin del contrato actual
		$conditions="(Cuenta.clientes_id = $idCliente)$filtrarFecha";
		
		$cuentas=$this->Cuenta->findAll($conditions,null, null, null, 1, 2);

		//se realiza la de lo pagado por esa persona
		$sumatoriaTotal=0;
		foreach($cuentas as $cuenta)
		{
			$sumatoriaTotal += $cuenta['Cuenta']['monto'];
		}
		$sumatoriaTotal = $this->redondear($sumatoriaTotal);
		return $sumatoriaTotal;
	}
	
	/**
	*Esta funcion devuelve cuanto pago un cliente y cuanto debe.
	*
	*@return array el primer campo es cuanto pago el cliente y el segundo es cuanto debe,
	*el arreglo es relacional.
	*@param integer $idCliente id del cliente del cual se necesita saber el estado.
	*@param date $fechaActual, esta fecha es hasta donde se necesita saber el estado 
	*del cliente.
	*/
	function getDeudaCliente($idCliente,$fechaActual=null,$fPrecioCustodia=0)
	{
		//el dinero que debe pagar en total sin conciderar lo que ya pago
		$debe = $this->requestAction("prestacions/getTotalPrestacion/$idCliente/$fechaActual/$fPrecioCustodia/");
		//cuanto dinero pago el cliente hasta la fecha actual
		$pago = $this->getTotalPagado($idCliente,$fechaActual);
		$arreglo = array ('pago'=>$this->redondear($pago),'debe'=>$this->redondear($debe));
		return $arreglo;
	}
	
	/**
	*Esta devuelve cuanto pago y cuanto debe un cliente.
	*
	*Lista los clientes y otorga la posibilidad de colocar las fecha hasta donde consultar
	*Luego setea los valores correspondientes (cuanto debe y cuanto pago un cliente especifico hasta una fecha dada) en un arreglo donde el primer campo tiene un indice pago y el segundo un indice debe para ser mostrados en la vista.
	*/
	function listarStatus()
	{
		//setea los clientes
		$clientes = $this->requestAction('/clientes/seleccionarClientes');
		$this->set('clientes',$clientes);
		
		if(!empty($this->data))
		{
			$idCliente = $this->data['Cliente']['id'];
			$fechaActual = $this->data['Cuenta']['fecha'];
			$cliente = $this->getDeudaCliente($idCliente,$fechaActual);
			$this->set('cliente',$cliente);
		}
	}
	
	function Agenda() 
	{
		$this->setearSubMenu();
		
		$this->set('today',date('d-m-Y'));
		
		$this->set('meses', array ('1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6'));
		
	}
	
	//genera una lista de los servicios que empieza con $nombre
	function listarChequesPorVencer($fecha_inicial=null, $fecha_final=null, $iLimite=null)
	{	
		
		$sql = "select ch.id, cu.monto, ch.fecha_de_pago, ch.vencimiento, ch.descripcion, cl.codigo, cl.nombre
				from cheques ch
				left join cuentas cu on ch.formapagos_id = cu.formapagos_id
				left join clientes cl on cu.clientes_id = cl.id
				where ch.vencimiento >='$fecha_inicial' and ch.vencimiento<='$fecha_final'
				order by ch.vencimiento
			   ";
//		pr($sql);		
		$resultado = $this->Cuenta->query($sql);
		return($resultado);
	}

	function getCheques($iLimite=null, $fecha_inicial=null, $meses=null, $sTipo='JSON')
	{
		$fecha_inicial=empty($fecha_inicial)?date('d-m-Y'):$fecha_inicial;
		$meses=empty($meses)?1:$meses;
		
		$fecha_inicial  = $this->convertDmyToYmd($fecha_inicial);
		$fecha_final  = $this->agregarMes($fecha_inicial, $meses);		
		$aCheques = $this->listarChequesPorVencer($fecha_inicial, $fecha_final, $iLimite);
		$sFilas='';
		$n = sizeof($aCheques);
		if ($n>0) {
			$sFilas="[";
		}
		for($i=0; $i<$n; $i++)
		{
			//creamos la tabla de datos de ingresos
			$gd_id=				"id:\""				.$aCheques[$i]['ch']['id']										. "\"";
			$gd_fecha_de_pago=	"fecha_de_pago:\""	.$this->convertDmyToYmd($aCheques[$i]['ch']['fecha_de_pago'])	. "\"";
			$gd_codigo=			"codigo:\""			.$aCheques[$i]['cl']['codigo']									. "\"";
			$gd_nombre=			"nombre:\""			.$aCheques[$i]['cl']['nombre']									. "\"";
			$gd_dias_restantes=	"dias_restantes:\""	.$this->diferenciaDias($aCheques[$i]['ch']['vencimiento'], $fecha_inicial). "\"";
			$gd_monto=			"monto:\""			.$aCheques[$i]['cu']['monto']									. "\"";
			$gd_descripcion=	"descripcion:\""	.$aCheques[$i]['ch']['descripcion']								. "\"";
			$gd_vencimiento=	"vencimiento:\""	.$this->convertDmyToYmd($aCheques[$i]['ch']['vencimiento'])		. "\"";


			($i<sizeof($aCheques)-1)?$sDelimitador = ',':$sDelimitador = ']';
			$sFilas .= "{" 	. $gd_id 				. "," 
							. $gd_fecha_de_pago 	. "," 
							. $gd_vencimiento		. "," 
							. $gd_descripcion		. "," 
							. $gd_monto 			. "," 
							. $gd_dias_restantes	. ","
							. $gd_codigo			. ","				
							. $gd_nombre				. 
						"}" 
							. $sDelimitador . "\n";
			
		}
//		pr($sFilas);
		$this->layout = false;
		echo $sFilas;
	}

	//Esta funcion setea los datos para mostrar un listado en la vista de los ingresos.
	function Ingreso() 
	{
		//$this->layout = false;
		$this->setearSubMenu();
		
		$this->setearSubMenu();
		
		$this->set('today',date('d-m-Y'));

	}
	
	//genera una lista de los servicios que empieza con $nombre
	function listarIngresos($iLimiteInic=null, $iLimiteFin=null)
	{
		$iLimiteInic=empty($iLimiteInic)?0:$iLimiteInic;
		$iLimiteFin=empty($iLimiteFin)?10:$iLimiteFin;
		$sSql = "select cu.id, cu.fecha, cu.monto, cu.observaciones,  fp.nombre as formapago, cl.codigo, cl.nombre as cliente
				from cuentas cu
				left join clientes cl on cu.clientes_id = cl.id
				left join formapagos fp on cu.formapagos_id = fp.id
				where cu.clientes_id <> 0
				order by cu.id desc
				limit $iLimiteInic,$iLimiteFin
			   ";
		$aResultado = $this->Cuenta->query($sSql);
		//echo($sql);
		//echo($resultado);
		return($aResultado);
	}

	function getIngresos($iLimiteInic=null, $iLimiteFin=null, $sTipo='JSON')
	{
		$aIngresos = $this->listarIngresos($iLimiteInic, $iLimiteFin);
		$sFilas='';
		$n = sizeof($aIngresos);
		$sFilas="[";
		for($i=0; $i<$n; $i++)
		{
			//creamos la tabla de datos de ingresos
			$gd_id=				"id:\""			.$aIngresos[$i]['cu']['id']								. "\"";
			$gd_fecha=			"fecha:\""		.$this->convertDmyToYmd($aIngresos[$i]['cu']['fecha'])	. "\"";
			$gd_monto=			"monto:\"".'$ '	.$aIngresos[$i]['cu']['monto']							. "\"";
			$gd_observaciones=	"observaciones:\""	.$aIngresos[$i]['cu']['observaciones']				. "\"";			
			$gd_formapago=		"formapago:\""	.$aIngresos[$i]['fp']['formapago']						. "\"";
			$gd_codigo=			"codigo:\""		.$aIngresos[$i]['cl']['codigo']							. "\"";
			$gd_cliente=		"cliente:\""	.$aIngresos[$i]['cl']['cliente']						. "\"";
			$gd_tipo=			"tipo:\""		.'I'													. "\"";

			($i<sizeof($aIngresos)-1)?$sDelimitador = ',':$sDelimitador = ']';
			$sFilas .= "{" 	. $gd_id 			. "," 
							. $gd_fecha 		. "," 
							. $gd_monto 		. "," 
							. $gd_observaciones . "," 							
							. $gd_formapago 	. "," 
							. $gd_codigo 		. "," 
							. $gd_cliente 		. "," 
							. $gd_tipo			. 
						"}" 
							. $sDelimitador . "\n";
			
		}
		$this->layout = false;
		echo $sFilas;
	}


	//Esta funcion setea los datos para mostrar un listado en la vista de los egresos.
	function Egreso() 
	{
		//cargamos el submenu
		$this->setearSubMenu();
	}
	
	//genera una lista de los servicios que empieza con $nombre
	function listarEgresos($iLimiteInic=null, $iLimiteFin=null)
	{
		$iLimiteInic=empty($iLimiteInic)?0:$iLimiteInic;
		$iLimiteFin=empty($iLimiteFin)?10:$iLimiteFin;
		$sql = "select cu.id, cu.fecha, cu.monto, cu.observaciones, fp.nombre as formapago, s.nombre as servicio
				from cuentas cu
				left join formapagos fp on cu.formapagos_id = fp.id
				left join servicios s on cu.servicios_id = s.id
				where cu.clientes_id = 0
				order by cu.id desc
				limit $iLimiteInic,$iLimiteFin
			   ";
		$resultado = $this->Cuenta->query($sql);
//		pr($sql);
//		pr($resultado);
		return($resultado);
	}

	function getEgresos($iLimiteInic=null, $iLimiteFin=null, $sTipo='JSON')
	{
		$aEgresos = $this->listarEgresos($iLimiteInic, $iLimiteFin);
		$sFilas='';
		$n = sizeof($aEgresos);
		$sFilas="[";
		for($i=0; $i<$n; $i++)
		{
			//creamos la tabla de datos
			$gd_id=				"id:\""				.$aEgresos[$i]['cu']['id']								. "\"";
			$gd_fecha=			"fecha:\""			.$this->convertDmyToYmd($aEgresos[$i]['cu']['fecha'])	. "\"";
			$gd_monto=			"monto:\"".'$ '		.$aEgresos[$i]['cu']['monto']							. "\"";
			$gd_observaciones=	"observaciones:\""	.$aEgresos[$i]['cu']['observaciones']					. "\"";
			$gd_formapago=		"formapago:\""		.$aEgresos[$i]['fp']['formapago']						. "\"";
			$gd_servicio=		"servicio:\""		.$aEgresos[$i]['s']['servicio']							. "\"";
			$gd_tipo=			"tipo:\""			.'E'												. "\"";

			($i<sizeof($aEgresos)-1)?$sDelimitador = ',':$sDelimitador = ']';
			$sFilas .= "{" 	. $gd_id 				. "," 
							. $gd_fecha 			. "," 
							. $gd_monto 			. "," 
							. $gd_observaciones 	. "," 
							. $gd_formapago 		. "," 
							. $gd_servicio 			. "," 
							. $gd_tipo				. 
						"}" 
							. $sDelimitador . "\n";
			
		}
		$this->layout = false;
		echo $sFilas;
	}
	
	//genera una lista de los servicios que empieza con $nombre
	function listarIngresosEgresos($aCrit=null) {
		
		//Limita la cantidad de resultados a devolver
		$iLimiteInic=($aCrit==null)?0:$aCrit['iLimiteIni'];
		$iLimiteFin=($aCrit==null)?10:$aCrit['iLimiteFin'];
		$orderBy = ($aCrit==null)? 'order by cu.id desc' : 'order by cu.fecha desc, cu.id desc';
		$where = '';

		if($aCrit!=null) {
			//Busca por fecha inicial
			$sFechaInicial = (isset($aCrit['sFechaInicial']))?$this->convertDmyToYmd($aCrit['sFechaInicial']):"";
			$where.=(isset($aCrit['sFechaInicial']))?(($where == "")? "where ": " and ")."cu.fecha >='$sFechaInicial'" :"";
			//Busca por fecha final
			$sFechaFinal = (isset($aCrit['sFechaFinal']))?$this->convertDmyToYmd($aCrit['sFechaFinal']):"";
			$where.=(isset($aCrit['sFechaFinal']))?(($where == "")? "where ": " and ")."cu.fecha <= '$sFechaFinal' " :"";
			//Busca por id de Cliente
			$where.=(isset($aCrit['iIdCliente']))? (($where == "")? "where ": " and ")."cl.id = ". $aCrit['iIdCliente']:"";
			//Busca por id de servicio.
			$where.=(isset($aCrit['iIdServicio']))? (($where == "")? "where ": " and ")."s.id = ". $aCrit['iIdServicio']:"";
			//Busca por nombre de cliente.
			$where.=((isset($aCrit['sCliente']) && ($aCrit['sCliente']!='')))? (($where == "")? "where ": " and ")." cl.nombre like '".$aCrit['sCliente']."%'":"";
			//Busca por nombre de servicio.		
			$where.=((isset($aCrit['sServicio']) && ($aCrit['sServicio']!='')))? (($where == "")? "where ": " and ")." s.nombre like '".$aCrit['sServicio']."%'":"";
			//Busca si es un ingreos.
			//Debe cambiarse esto.
			$where.=(isset($aCrit['iIngreso']))? ((!$aCrit['iIngreso'])? (($where == "")? "where ": " and ")." cl.codigo is null":""):"";		
			//Busca si es un egreso.
			$where.=(isset($aCrit['iEgreso']))? ((!$aCrit['iEgreso'])? (($where == "")? "where ": " and ")." cl.codigo is not null":""):"";		
		}
		
		$sql = "
			select cu.id, cu.fecha, cu.monto, cu.observaciones, fp.nombre as formapago, cl.codigo, cl.nombre as cliente, s.nombre as servicio, (case when codigo is null then 'E' else 'I' END) as tipo
			from cuentas cu
			left join clientes cl on cu.clientes_id = cl.id
			left join servicios s on cu.servicios_id = s.id
			left join formapagos fp on cu.formapagos_id = fp.id
			$where
			$orderBy
			limit $iLimiteInic,$iLimiteFin
		";
		//pr($iCrit);
		//pr($sql);
		$resultado = $this->Cuenta->query($sql);
		return($resultado);
	}	
	
	function getIngresosEgresos() {
		$aCrit = $_POST;
	
		$aIngresosEgresos = (empty($aCrit))? $this->listarIngresosEgresos():$this->listarIngresosEgresos($aCrit);

		$sFilas='';
		$iIngresosEgresos = sizeof($aIngresosEgresos);
		$sFilas=($iIngresosEgresos>0)?"[":"";
		
		for($i=0; $i<$iIngresosEgresos; $i++)
		{
			//creamos la tabla de datos
			$gd_id=				"id:\""			.$aIngresosEgresos[$i]['cu']['id']								. "\"";
			$gd_fecha=			"fecha:\""		.$this->convertDmyToYmd($aIngresosEgresos[$i]['cu']['fecha'])	. "\"";
			$gd_monto=			"monto:\"".'$ '	.$aIngresosEgresos[$i]['cu']['monto']							. "\"";
			$gd_observaciones=	"observaciones:\""	.$aIngresosEgresos[$i]['cu']['observaciones']				. "\"";			
			$gd_formapago=		"formapago:\""	.$aIngresosEgresos[$i]['fp']['formapago']						. "\"";
			$gd_codigo=			"codigo:\""		.$aIngresosEgresos[$i]['cl']['codigo']							. "\"";
			$gd_cliente=		"cliente:\""	.$aIngresosEgresos[$i]['cl']['cliente']							. "\"";
			$gd_servicio=		"servicio:\""	.$aIngresosEgresos[$i]['s']['servicio']							. "\"";
			$gd_tipo=			"tipo:\""		.$aIngresosEgresos[$i][0]['tipo']								. "\"";

			($i<sizeof($aIngresosEgresos)-1)?$sDelimitador = ',':$sDelimitador = ']';
			$sFilas .= "{" 	. $gd_id 			. "," 
							. $gd_fecha 		. "," 
							. $gd_monto 		. ","
							. $gd_observaciones . "," 							 
							. $gd_formapago 	. "," 
							. $gd_codigo 		. "," 
							. $gd_cliente 		. "," 
							. $gd_servicio 		. "," 
							. $gd_tipo			. 
						"}" 
							. $sDelimitador . "\n";
			
		}
		$this->layout = false;
		echo $sFilas;
	}


//		
	/**
	*Esta funcion solo lista los clientes para redirigirse a getCuentasIngreso
	*
	*Una vez redirijidos a getCuentasIngreso se muestra las cuentas de un cliente.
	*@return 
	*@param
	*@author gush
	*/
	function listarClientesCuentas()
	{
		//setea los clientes
		$this->setearSubMenu();
		$clientes = $this->requestAction('/clientes/seleccionarClientes');
		$this->set('clientes',$clientes);
	}
	
	/**
	*Esta funcion obtiene y setea las cuentas de ingreso de un cliente particular
	*
	*Esta funcion necesita de la funcion listarClientesCuentas si o si ya que esta lista los clientes para luego pasar el id a getCuentasIngreso y esta es la que muesta las cuentas de dicho cliente.
	*@return 
	*@param 
	*@author gush
	*/
	function getCuentasIngreso()
	{
		$idCliente = $this->data['Cliente']['id'];
		$conditions = array ('clientes_id'=>$idCliente);
		$cuentas = $this->Cuenta->findAll($conditions);
		$this->set('cuentas',$cuentas);
	}
		
	/**
	 * Funcion que elimina una cuenta
	 * @return dependiendo de $sTipo, si es JSON retorna un array en formato JSON
	 * 		   en caso contrario retorna un booleano.
	 * @param $iIdCliente integer
	 * @param $sTipo string
	 */
	function delete ($iIdCuenta=null, $sTipo=null, $sTipoCuenta=null) {
		//Deberia borrar la cuenta asociada y la forma de pago, el tipo de pago.
		$aRetorno = array('estado'=>true, 
						  'mensaje'=>'');
		
		$sCuenta = ($sTipoCuenta=='E')?'Egreso':'Ingreso';
		//Obtenemos la forma de pago, y el id de la misma asi sabemos que tabla debemos borrar.
		//Esta pensada la proxima reestructuracion.
		$sSql = "
			select c.formapagos_id, 
			(case when (e.formapagos_id is null) then (case when (ch.formapagos_id is null) 
				then 'T' else 'C'end) else 'E'end) as tipoPago, 
			(case when (e.formapagos_id is null) then (case when (ch.formapagos_id is null) 
				then t.id else ch.id end) else e.id end) as iTipoPago
			from cuentas c
			left join formapagos fp on fp.id = c.formapagos_id
			left join efectivos e on e.formapagos_id = c.formapagos_id
			left join cheques ch on ch.formapagos_id = c.formapagos_id
			left join tarjetas t on t.formapagos_id = c.formapagos_id
			where c.id = $iIdCuenta			
			";
		$aResulset = $this->Cuenta->query($sSql);
		$tipoPago=$aResulset[0][0]['tipoPago'];
		$idTipoPago=$aResulset[0][0]['iTipoPago'];
		switch ($tipoPago) {
			case 'E': 
				$this->ModelLoader->setController($this);
				$this->ModelLoader->load('Efectivo');
				$aRetorno['estado'] = $this->Efectivo->del($idTipoPago);
				$aRetorno['mensaje']=($aRetorno['estado']!=true)? "Error. $sCuenta $iIdCuenta no borrado. Problemas con Efectivo asociado.":"";
				break;
			case 'C':
				$this->ModelLoader->setController($this);
				$this->ModelLoader->load('Cheque');
				$aRetorno['estado'] = $this->Cheque->del($idTipoPago);
				$aRetorno['mensaje']=($aRetorno['estado']!=true)? "Error. $sCuenta $iIdCuenta no borrado. Problemas con Cheque asociado.":"";
				break;
			case 'T':
				$this->ModelLoader->setController($this);
				$this->ModelLoader->load('Tarjeta');
				$aRetorno['estado'] = $this->Tarjeta->del($idTipoPago);
				$aRetorno['mensaje']=($aRetorno['estado']!=true)? "Error. $sCuenta $iIdCuenta no borrado. Problemas con Tarjeta asociada.":"";
				
				break;
			default: 
				$aRetorno['mensaje']='Error grave, por favor seguir las instrucciones del protocolo de emergencia. :P';
				break;
		}
		if ($aRetorno['estado']) {
			$aRetorno['estado'] = $this->Cuenta->del($iIdCuenta);
			$aRetorno['mensaje']=($aRetorno['estado']==true)? "$sCuenta $iIdCuenta borrado." : "Error. $sCuenta $iIdCuenta no borrado.";
		}
		if ($sTipo == 'JSON') {
			$this->layout = false;
			echo '['.json_encode($aRetorno).']';
		}
		else {
			return $aRetorno['estado'];			
		}

	}

	
	function redondear($valor) 
	{
		$float_redondeado=round($valor * 100) / 100;
		return $float_redondeado;
	}
	
	/**
	*Lista las ultimas cuentas agregadas
	*/
	function listarUltimas($tipoCuentas,$cant=null){
		$campos = array(
		'Cuenta.fecha',
		'Cuenta.monto',
		'Cliente.nombre',
		'Servicio.nombre',
		'Formapago.nombre'
		);
		if($tipoCuentas == 'egreso')
			$cond = 'Cuenta.clientes_id = 0';
		else
			$cond = 'Cuenta.clientes_id <> 0';
		$ord = 'Cuenta.id DESC';
		$limit = null;	
			
		$prestaciones = $this->Cuenta->findAll($cond, $campos, $ord, $limit);
		return $prestaciones;
	}
	
	function setearSubMenu(){
		$aSubMenu[0]['title'] = 'Ingreso';
		$aSubMenu[0]['href']	 = PATH . 'cuentas/addIngreso';
		$aSubMenu[0]['image']	 = PATH_IMAGE_SUBMENU . 'btn_ingreso_caja.png';
		
		$aSubMenu[2]['title'] = 'Egreso';
		$aSubMenu[2]['href']	 = PATH . 'cuentas/addEgreso';
		$aSubMenu[2]['image']	 = PATH_IMAGE_SUBMENU . 'btn_egreso_caja.png';
		
		$aSubMenu[4]['title'] = 'Agenda Vencimientos';
		$aSubMenu[4]['href']	 = PATH . 'cuentas/Agenda';
		$aSubMenu[4]['image']	 = '';

		$this->set('aSubMenu', $aSubMenu);
	
	}
	
}
?>